Get Box<Source> to implement Source
authorAlex Crichton <alex@alexcrichton.com>
Tue, 2 Feb 2016 17:31:53 +0000 (09:31 -0800)
committerAlex Crichton <alex@alexcrichton.com>
Mon, 1 Aug 2016 17:11:20 +0000 (10:11 -0700)
src/cargo/core/registry.rs
src/cargo/core/source.rs

index ccfe87cabee5e61ba968de21cae3d95ec8e5b8f4..6dc2d9cc4ddfb53b76a8c993d911add566012cd3 100644 (file)
@@ -26,6 +26,12 @@ impl Registry for Vec<Package> {
     }
 }
 
+impl<'a, T: ?Sized + Registry + 'a> Registry for Box<T> {
+    fn query(&mut self, name: &Dependency) -> CargoResult<Vec<Summary>> {
+        (**self).query(name)
+    }
+}
+
 /// This structure represents a registry of known packages. It internally
 /// contains a number of `Box<Source>` instances which are used to load a
 /// `Package` from.
index 83098c5758e8d009d4383223f7cb3cec48c85d84..e590f661b7d56810f017030449c6f823fb26ae79 100644 (file)
@@ -37,6 +37,20 @@ pub trait Source: Registry {
     fn fingerprint(&self, pkg: &Package) -> CargoResult<String>;
 }
 
+impl<'a, T: Source + ?Sized + 'a> Source for Box<T> {
+    fn update(&mut self) -> CargoResult<()> {
+        (**self).update()
+    }
+
+    fn download(&mut self, id: &PackageId) -> CargoResult<Package> {
+        (**self).download(id)
+    }
+
+    fn fingerprint(&self, pkg: &Package) -> CargoResult<String> {
+        (**self).fingerprint(pkg)
+    }
+}
+
 #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
 enum Kind {
     /// Kind::Git(<git reference>) represents a git repository